home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / net / SocketPermission.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  7.0 KB  |  438 lines

  1. package java.net;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.io.Serializable;
  7. import java.security.AccessController;
  8. import java.security.Permission;
  9. import java.security.PermissionCollection;
  10. import java.util.StringTokenizer;
  11. import sun.net.util.IPAddressUtil;
  12. import sun.security.action.GetBooleanAction;
  13.  
  14. public final class SocketPermission extends Permission implements Serializable {
  15.    private static final long serialVersionUID = -7204263841984476862L;
  16.    private static final int CONNECT = 1;
  17.    private static final int LISTEN = 2;
  18.    private static final int ACCEPT = 4;
  19.    private static final int RESOLVE = 8;
  20.    private static final int NONE = 0;
  21.    private static final int ALL = 15;
  22.    private static final int PORT_MIN = 0;
  23.    private static final int PORT_MAX = 65535;
  24.    private static final int PRIV_PORT_MAX = 1023;
  25.    private transient int mask;
  26.    private String actions;
  27.    private transient String hostname;
  28.    private transient String cname;
  29.    private transient InetAddress[] addresses;
  30.    private transient boolean wildcard;
  31.    private transient boolean init_with_ip;
  32.    private transient boolean invalid;
  33.    private transient int[] portrange;
  34.    private static boolean trustProxy;
  35.  
  36.    public SocketPermission(String var1, String var2) {
  37.       super(getHost(var1));
  38.       this.init(this.getName(), getMask(var2));
  39.    }
  40.  
  41.    SocketPermission(String var1, int var2) {
  42.       super(getHost(var1));
  43.       this.init(this.getName(), var2);
  44.    }
  45.  
  46.    private static String getHost(String var0) {
  47.       if (var0.equals("")) {
  48.          return "localhost";
  49.       } else {
  50.          if (var0.charAt(0) != '[' && var0.indexOf(58) != var0.lastIndexOf(58)) {
  51.             StringTokenizer var2 = new StringTokenizer(var0, ":");
  52.             int var3 = var2.countTokens();
  53.             if (var3 == 9) {
  54.                int var1 = var0.lastIndexOf(58);
  55.                var0 = "[" + var0.substring(0, var1) + "]" + var0.substring(var1);
  56.             } else {
  57.                if (var3 != 8 || var0.indexOf("::") != -1) {
  58.                   throw new IllegalArgumentException("Ambiguous hostport part");
  59.                }
  60.  
  61.                var0 = "[" + var0 + "]";
  62.             }
  63.          }
  64.  
  65.          return var0;
  66.       }
  67.    }
  68.  
  69.    private int[] parsePort(String var1) throws Exception {
  70.       if (var1 != null && !var1.equals("") && !var1.equals("*")) {
  71.          int var2 = var1.indexOf(45);
  72.          if (var2 == -1) {
  73.             int var7 = Integer.parseInt(var1);
  74.             return new int[]{var7, var7};
  75.          } else {
  76.             String var3 = var1.substring(0, var2);
  77.             String var4 = var1.substring(var2 + 1);
  78.             int var5;
  79.             if (var3.equals("")) {
  80.                var5 = 0;
  81.             } else {
  82.                var5 = Integer.parseInt(var3);
  83.             }
  84.  
  85.             int var6;
  86.             if (var4.equals("")) {
  87.                var6 = 65535;
  88.             } else {
  89.                var6 = Integer.parseInt(var4);
  90.             }
  91.  
  92.             if (var5 >= 0 && var6 >= 0 && var6 >= var5) {
  93.                return new int[]{var5, var6};
  94.             } else {
  95.                throw new IllegalArgumentException("invalid port range");
  96.             }
  97.          }
  98.       } else {
  99.          return new int[]{0, 65535};
  100.       }
  101.    }
  102.  
  103.    private void init(String var1, int var2) {
  104.       if ((var2 & 15) != var2) {
  105.          throw new IllegalArgumentException("invalid actions mask");
  106.       } else {
  107.          this.mask = var2 | 8;
  108.          int var3 = 0;
  109.          byte var4 = 0;
  110.          boolean var5 = false;
  111.          int var6 = -1;
  112.          String var7 = var1;
  113.          if (var1.charAt(0) == '[') {
  114.             var4 = 1;
  115.             var3 = var1.indexOf(93);
  116.             if (var3 == -1) {
  117.                throw new IllegalArgumentException("invalid host/port: " + var1);
  118.             }
  119.  
  120.             var1 = var1.substring(var4, var3);
  121.             var6 = var7.indexOf(58, var3 + 1);
  122.          } else {
  123.             var4 = 0;
  124.             var6 = var1.indexOf(58, var3);
  125.             if (var6 != -1) {
  126.                var1 = var1.substring(var4, var6);
  127.             }
  128.          }
  129.  
  130.          if (var6 != -1) {
  131.             String var8 = var7.substring(var6 + 1);
  132.  
  133.             try {
  134.                this.portrange = this.parsePort(var8);
  135.             } catch (Exception var12) {
  136.                throw new IllegalArgumentException("invalid port range: " + var8);
  137.             }
  138.          } else {
  139.             this.portrange = new int[]{0, 65535};
  140.          }
  141.  
  142.          this.hostname = var1;
  143.          if (var1.lastIndexOf(42) > 0) {
  144.             throw new IllegalArgumentException("invalid host wildcard specification");
  145.          } else if (var1.startsWith("*")) {
  146.             this.wildcard = true;
  147.             if (var1.equals("*")) {
  148.                this.cname = "";
  149.             } else {
  150.                if (!var1.startsWith("*.")) {
  151.                   throw new IllegalArgumentException("invalid host wildcard specification");
  152.                }
  153.  
  154.                this.cname = var1.substring(1).toLowerCase();
  155.             }
  156.  
  157.          } else {
  158.             if (var1.length() > 0) {
  159.                char var17 = var1.charAt(0);
  160.                if (var17 == ':' || Character.digit(var17, 16) != -1) {
  161.                   byte[] var9 = IPAddressUtil.textToNumericFormatV4(var1);
  162.                   if (var9 == null) {
  163.                      var9 = IPAddressUtil.textToNumericFormatV6(var1);
  164.                   }
  165.  
  166.                   if (var9 != null) {
  167.                      try {
  168.                         this.addresses = new InetAddress[]{InetAddress.getByAddress(var9)};
  169.                         this.init_with_ip = true;
  170.                      } catch (UnknownHostException var11) {
  171.                         this.invalid = true;
  172.                      }
  173.                   }
  174.                }
  175.             }
  176.  
  177.          }
  178.       }
  179.    }
  180.  
  181.    private static int getMask(String param0) {
  182.       // $FF: Couldn't be decompiled
  183.    }
  184.  
  185.    void getCanonName() throws UnknownHostException {
  186.       if (this.cname == null && !this.invalid) {
  187.          try {
  188.             if (this.addresses == null) {
  189.                this.getIP();
  190.             }
  191.  
  192.             if (this.init_with_ip) {
  193.                this.cname = this.addresses[0].getHostName(false).toLowerCase();
  194.             } else {
  195.                this.cname = InetAddress.getByName(this.addresses[0].getHostAddress()).getHostName(false).toLowerCase();
  196.             }
  197.  
  198.          } catch (UnknownHostException var2) {
  199.             this.invalid = true;
  200.             throw var2;
  201.          }
  202.       }
  203.    }
  204.  
  205.    void getIP() throws UnknownHostException {
  206.       if (this.addresses == null && !this.wildcard && !this.invalid) {
  207.          try {
  208.             String var1;
  209.             if (this.getName().charAt(0) == '[') {
  210.                var1 = this.getName().substring(1, this.getName().indexOf(93));
  211.             } else {
  212.                int var2 = this.getName().indexOf(":");
  213.                if (var2 == -1) {
  214.                   var1 = this.getName();
  215.                } else {
  216.                   var1 = this.getName().substring(0, var2);
  217.                }
  218.             }
  219.  
  220.             this.addresses = new InetAddress[]{InetAddress.getAllByName0(var1, false)[0]};
  221.          } catch (UnknownHostException var3) {
  222.             this.invalid = true;
  223.             throw var3;
  224.          } catch (IndexOutOfBoundsException var4) {
  225.             this.invalid = true;
  226.             throw new UnknownHostException(this.getName());
  227.          }
  228.       }
  229.    }
  230.  
  231.    public boolean implies(Permission var1) {
  232.       if (!(var1 instanceof SocketPermission)) {
  233.          return false;
  234.       } else {
  235.          SocketPermission var4 = (SocketPermission)var1;
  236.          return (this.mask & var4.mask) == var4.mask && this.impliesIgnoreMask(var4);
  237.       }
  238.    }
  239.  
  240.    boolean impliesIgnoreMask(SocketPermission var1) {
  241.       if ((var1.mask & 8) == var1.mask || var1.portrange[0] >= this.portrange[0] && var1.portrange[1] <= this.portrange[1]) {
  242.          if (this.wildcard && "".equals(this.cname)) {
  243.             return true;
  244.          } else if (!this.invalid && !var1.invalid) {
  245.             try {
  246.                if (this.init_with_ip) {
  247.                   if (var1.wildcard) {
  248.                      return false;
  249.                   } else if (var1.init_with_ip) {
  250.                      return this.addresses[0].equals(var1.addresses[0]);
  251.                   } else {
  252.                      if (var1.addresses == null) {
  253.                         var1.getIP();
  254.                      }
  255.  
  256.                      for(int var6 = 0; var6 < var1.addresses.length; ++var6) {
  257.                         if (this.addresses[0].equals(var1.addresses[var6])) {
  258.                            return true;
  259.                         }
  260.                      }
  261.  
  262.                      return false;
  263.                   }
  264.                } else if (!this.wildcard && !var1.wildcard) {
  265.                   if (this.addresses == null) {
  266.                      this.getIP();
  267.                   }
  268.  
  269.                   if (var1.addresses == null) {
  270.                      var1.getIP();
  271.                   }
  272.  
  273.                   for(int var3 = 0; var3 < this.addresses.length; ++var3) {
  274.                      for(int var2 = 0; var2 < var1.addresses.length; ++var2) {
  275.                         if (this.addresses[var3].equals(var1.addresses[var2])) {
  276.                            return true;
  277.                         }
  278.                      }
  279.                   }
  280.  
  281.                   if (this.cname == null) {
  282.                      this.getCanonName();
  283.                   }
  284.  
  285.                   if (var1.cname == null) {
  286.                      var1.getCanonName();
  287.                   }
  288.  
  289.                   return this.cname.equalsIgnoreCase(var1.cname);
  290.                } else if (this.wildcard && var1.wildcard) {
  291.                   return var1.cname.endsWith(this.cname);
  292.                } else if (var1.wildcard) {
  293.                   return false;
  294.                } else {
  295.                   if (var1.cname == null) {
  296.                      var1.getCanonName();
  297.                   }
  298.  
  299.                   return var1.cname.endsWith(this.cname);
  300.                }
  301.             } catch (UnknownHostException var5) {
  302.                return trustProxy ? this.inProxyWeTrust(var1) : false;
  303.             }
  304.          } else {
  305.             return trustProxy ? this.inProxyWeTrust(var1) : false;
  306.          }
  307.       } else {
  308.          return false;
  309.       }
  310.    }
  311.  
  312.    private boolean inProxyWeTrust(SocketPermission var1) {
  313.       String var2 = this.hostname;
  314.       String var3 = var1.hostname;
  315.       return var2 == null ? false : var2.equalsIgnoreCase(var3);
  316.    }
  317.  
  318.    public boolean equals(Object var1) {
  319.       if (var1 == this) {
  320.          return true;
  321.       } else if (!(var1 instanceof SocketPermission)) {
  322.          return false;
  323.       } else {
  324.          SocketPermission var2 = (SocketPermission)var1;
  325.          if (this.mask != var2.mask) {
  326.             return false;
  327.          } else if ((var2.mask & 8) == var2.mask || this.portrange[0] == var2.portrange[0] && this.portrange[1] == var2.portrange[1]) {
  328.             if (this.getName().equalsIgnoreCase(var2.getName())) {
  329.                return true;
  330.             } else {
  331.                try {
  332.                   this.getCanonName();
  333.                   var2.getCanonName();
  334.                } catch (UnknownHostException var4) {
  335.                   return false;
  336.                }
  337.  
  338.                if (!this.invalid && !var2.invalid) {
  339.                   return this.cname != null ? this.cname.equalsIgnoreCase(var2.cname) : false;
  340.                } else {
  341.                   return false;
  342.                }
  343.             }
  344.          } else {
  345.             return false;
  346.          }
  347.       }
  348.    }
  349.  
  350.    public int hashCode() {
  351.       if (!this.init_with_ip && !this.wildcard) {
  352.          try {
  353.             this.getCanonName();
  354.          } catch (UnknownHostException var2) {
  355.          }
  356.  
  357.          return !this.invalid && this.cname != null ? this.cname.hashCode() : this.getName().hashCode();
  358.       } else {
  359.          return this.getName().hashCode();
  360.       }
  361.    }
  362.  
  363.    int getMask() {
  364.       return this.mask;
  365.    }
  366.  
  367.    private static String getActions(int var0) {
  368.       StringBuilder var1 = new StringBuilder();
  369.       boolean var2 = false;
  370.       if ((var0 & 1) == 1) {
  371.          var2 = true;
  372.          var1.append("connect");
  373.       }
  374.  
  375.       if ((var0 & 2) == 2) {
  376.          if (var2) {
  377.             var1.append(',');
  378.          } else {
  379.             var2 = true;
  380.          }
  381.  
  382.          var1.append("listen");
  383.       }
  384.  
  385.       if ((var0 & 4) == 4) {
  386.          if (var2) {
  387.             var1.append(',');
  388.          } else {
  389.             var2 = true;
  390.          }
  391.  
  392.          var1.append("accept");
  393.       }
  394.  
  395.       if ((var0 & 8) == 8) {
  396.          if (var2) {
  397.             var1.append(',');
  398.          } else {
  399.             var2 = true;
  400.          }
  401.  
  402.          var1.append("resolve");
  403.       }
  404.  
  405.       return var1.toString();
  406.    }
  407.  
  408.    public String getActions() {
  409.       if (this.actions == null) {
  410.          this.actions = getActions(this.mask);
  411.       }
  412.  
  413.       return this.actions;
  414.    }
  415.  
  416.    public PermissionCollection newPermissionCollection() {
  417.       return new SocketPermissionCollection();
  418.    }
  419.  
  420.    private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
  421.       if (this.actions == null) {
  422.          this.getActions();
  423.       }
  424.  
  425.       var1.defaultWriteObject();
  426.    }
  427.  
  428.    private synchronized void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  429.       var1.defaultReadObject();
  430.       this.init(this.getName(), getMask(this.actions));
  431.    }
  432.  
  433.    static {
  434.       Boolean var0 = (Boolean)AccessController.doPrivileged(new GetBooleanAction("trustProxy"));
  435.       trustProxy = var0;
  436.    }
  437. }
  438.